package springmvc.output.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * description: mvc组件的配置类
 * TODO：视图解析器实现，Handler根据指定的前后缀匹配JSP文件
 *
 * 1. @Configuration 配置类
 * 2. @ComponentScan("") 类路径扫描
 * 3. @EnableWebMvc 引入 HandlerMapping、HandlerAdapter、JSON解析器
 * 4. 实现 WebMvcConfigurer 接口方法 configureViewResolvers()，在方法中指定匹配视图文件的前后缀路径，实现视图解析能力
 * 5. 静态资源查找，通过 configureDefaultServletHandling 方法实现
 * 6. DispatchServlet 会从 HandlerMapping（保存Handler和路径）寻找匹配的 Handler
 * 7. 如果没有对应的 Handler，会转发给方法创建的 DefaultServletHandler 中匹配静态资源
 */

@Configuration
@ComponentScan("springmvc.output.controller")
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        //registry可以快速添加前后缀，实现handler方法和index.jsp的匹配
        registry.jsp("/WEB-INF/views/",".jsp");
    }

    //开启静态资源查找
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
}
